Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Структурно-функциональный подход к проектированию информационных технологий и автоматизированных систем с использованием CASE-средств

..pdf
Скачиваний:
1
Добавлен:
12.11.2023
Размер:
3.01 Mб
Скачать

таким: Blob, Datetime, Number, String). Введите логическое и физическое имена доменов "Logical Name" и "Physical Name". Новый домен автоматически унаследует все характеристики, присвоенные родительскому домену.

Изменение имени домена

4.Войдите в редактор "Domain Dictionary".

5.Выберите домен, имя которого нужно изменить, в списке в верхней части редактора "Domain Dictionary".

6.Нажмите кнопку "Rename" для изменения имени. Максимальная длина имени определяется конкретной СУБД.

Изменение типа данных домена

1.Войдите в редактор "Domain Dictionary".

2.Выберите домен, тип данных которого нужно изменить, в списке в верхней части редактора "Domain Dictionary". ERwin покажет тип данных, который сейчас присвоен выбранному домену, в списке "<DB> Datatype" с правой стороны редактора.

3.Нажмите по новому типу данных, который следует присвоить выбранному домену, в списке "<DB> Datatype". Если для задания выбранного типа требуется задать длину (например, для типа CHAR()), то в скобках следует ввести нужное число, затем снова щелкните по домену в верхнем списке, чтобы вставить параметр в заново присвоенный тип данных.

Изменение режима нулевых значений домена

1.Войдите в редактор "Domain Dictionary".

2.Выберите домен, режим нулевых значений которого следует изменить, в списке в верхней части редактора "Domain Dictionary".

3.Нажмите одну из кнопок в групповом окне "Null Option" для изменения режима нулевых значений домена.

Присвоение домену значения по умолчанию

1.Войдите в редактор "Domain Dictionary".

2.Выберите домен, которому следует присвоить значение по умолчанию, в списке в верхней части редактора "Domain Dictionary".

3.Щелкните по стрелке "вниз" для открытия списка "Default", а затем выберите значению "Default Value", которое следует присвоить выбранному домену.

4.Для задания нового значения по умолчанию и присвоения его до-

мену следует нажать кнопку рядом с "Default" для входа в редактор "Default/Initial Values". Нажать на кнопку "New" и задать логическое и физическое имена значения. Затем нажать "OK" и в окне закладки <DB> ввести значение по умолчанию. Нажать "OK" для возврата в редактор.

Если нужно убедиться, что никакое значение по умолчанию не было присвоено домену, то выберите из списка верхнюю строку - пунктирную линию (----).

181

Присвоение домену правила валидации

1.Войдите в редактор "Domain Dictionary".

2.Выберите домен, которому нужно присвоить правило валидации, в списке в верхней части редактора "Domain Dictionary".

3.Щелкните по стрелке "вниз" для открытия списка "Valid", а затем, если правило валидации есть в наличии, щелкните по правилу валидации, которое нужно присвоить выбранному домену.

4.Для задания нового правила валидации и присвоения его домену

следует войти в редактор "Validation Rules", нажав на кнопку рядом с "Valid". Нажмите кнопку "New" для создания нового правила валидации. Задайте логическое и физическое имена правила валидации. Можно задать три типа правил валидации: User-Defined (в окне Validation задается описание правила), Min/Max (можно задать границы правила), Valid Values List (можно задать список валидации). Можно переименовать или удалить правило с помощью кнопок Rename и Delete соответственно.

Если нужно убедиться, что никакое правило валидации не было присвоено домену, то выберите из списка верхнюю строку – пунктирную ли-

нию (----).

Связывание с доменом новых ограничений

Войдите в редактор "Domain Dictionary", а затем выберите домен, с которым следует связать новое ограничение.

Если после этого нажать кнопку "Default" или "Validation" для задания нового ограничения на колонку, ERwin автоматически использует имя выбранного домена в качестве имени ограничения и связывает новое ограничение с выделенным доменом.

Восстановление характеристик домена с присвоением им значения, задаваемого по умолчанию

1.Войдите в редактор "Domain Dictionary", а затем выберите домен, характеристики которого следует восстановить.

2.Нажмите кнопку "Reset" для входа в диалог "Reset Domain Property".

3.Отметьте один или несколько пунктов в диалоге "Reset Domain Properties", чтобы показать, какие из характеристик следует восстановить, присвоив им значения по умолчанию.

Нажмите "ОК" для восстановления помеченных характеристик или "Cancel" - для выхода из диалога без изменения характеристик.

Удаление домена

1.Войдите в редактор "Domain Dictionary".

2.Выделите имя домена, который следует удалить, в списке, который находится в верхней части редактора "Domain Dictionary".

182

3.Нажмите кнопку "Delete" для удаления домена. ERwin удаляет выбранный домен, не запрашивая подтверждения на удаление.

Если удаляемый домен связан с колонкой, то ERwin выдает окнодиалог, в котором содержится имя домена и связанная с ним колонка (колонки) и запрашивается подтверждение на удаление. При удалении домена все характеристики колонки, определенные этим доменом, восстанавливаются в соответствии с содержимым родительского домена.

Порядок выполнения работы

1.Откройте модель "lab_5_1", сохраненную в пятой лабораторной работе (модель должна иметь возможность быть рассмотренной как с логической, так и физической точки зрения).

2.Сохраните ее как "lab_8.er1".

3.Войдите в редактор "Domain Dictionary".

4.Выберите способ редактирования в "Edit Mode" "Logical". Задайте порядок сортировки в алфавитном порядке.

5.Нажмите кнопку "New" для создания домена. Выделите родительский домен String в списке "Domain". Введите логическое (Dom) и физиче-

ское (Dom) имена доменов "Logical Name" и "Physical Name".

6.Измените имя домена с помощью команды "Rename" на "My_Dom".

7.Изменение типа данных домена:

Выберите домен "My_Dom", тип данных которого нужно изменить, в списке в верхней части редактора "Domain Dictionary";

Щелкните по новому типу данных (char(22)), который следует присвоить выбранному домену, в списке "<DB> Datatype".

8.Присвойте новую иконку созданному домену.

9.Изменение режима нулевых значений домена;

Поменяйте вид модели на физический (physical);

Выберите домен "My_Dom", режим нулевых значений которого следует изменить, в списке в верхней части редактора "Domain Dictionary";

Нажмите кнопку "NOT NULL" в групповом окне "Null Option" для изменения режима нулевых значений домена.

10.Присвоение домену значения по умолчанию

Выберите домен "My_Dom", которому следует присвоить значение по умолчанию, в списке в верхней части редактора "Domain Dictionary";

Для задания нового значения по умолчанию и присвоения его домену нажмите кнопку рядом с "Default" для входа в редактор "Default/Initial Values". Нажмите на кнопку "New" и задайте логическое и физическое имена значения "DefVal" и "DefVal". Затем нажмите "OK" и введите значение по умолчанию: "Hello". В колонке "Comment" введите описание значения по умолчанию. Нажмите "OK" для возврата в редактор.

183

11.Связывание с доменом новых ограничений

Войдите в редактор "Domain Dictionary", а затем выберите домен, с которым следует связать новое ограничение;

Создайте новое ограничение "New_valiation";

Выберите "Valid Value List" и задайте три возможных значения: "Hello", "Goodbye" и "Thank you".

12.Измените имя таблицы "Customer" на "My_Customer".

13.Установите домен "My_Dom" для аттрибутов "Name", "C_Name" и "C_country".

14.Сохраните модель.

Контрольные вопросы

1.Каким образом производится работа с информацией, ориентированной на СУБД?

2.Что такое правило валидации?

3.Как задается значение по умолчанию?

4.Как производится наследование доменов?

5.В каких целях используют домены?

184

Лабораторная работа №9. Триггеры

Цель работы: Ознакомиться с триггерами в ERWin.

Теоретические сведения

Триггеры - это процедуры базы данных, которая автоматически вызывается SQL сервером при возникновении определенных событий (добавление, удаление, обновление записей). Триггеры хранятся на сервере для того, чтобы быстро производить выполнение запросов, валидацию данных и выполнять другие, часто вызываемые функции. Если эти команды сохраняются на сервере, то нужно создавать код только один раз, а не в каждом приложении, работающем с базой данных. Это экономит время при написании программ. Поскольку коды хранятся на сервере, то их не требуется пересылать по сети из клиентского приложения, что значительно снижает сетевой трафик. При сохранении кодов на сервере гарантируется целостность данных и правила (Business Rules) поддерживаются единым образом, независимо от того, какое клиентское приложение обращается к данным.

Триггером называется именованный набор прекомпилированных команд SQL, хранящийся на сервере, который автоматически выполняется, когда происходит заданное событие. Например, триггер может выполняться при вставке, изменении или удалении строки в существующей таблице. Триггер сообщает СУБД, как нужно выполнять команды SQL INSERT, UPDATE или DELETE, чтобы выполнялись нормальные правила (Business Rules) организации.

Триггер ссылочной целостности – особый вид триггера, используе-

мый для поддержания целостности между двумя таблицами, которые связаны между собой. Если строка в одной таблице вставляется, изменяется или удаляется, то триггер ссылочной целостности (RI-триггер) сообщает СУБД, что нужно делать с теми строками в других таблицах, у которых значение внешнего ключа совпадает со значением первичного ключа вставленной (измененной, удаленной) строки.

Если СУБД поддерживает RI-триггеры, то команда DELETE языка SQL может быть обработана одним из следующих способов:

Правило ссылочной целостности, запрещающее вставку, изменение или удаление строки, называется RESTRICT.

Правило ссылочной целостности, передающее изменение от одной таблицы к другой, называется CASCADE.

Правило ссылочной целостности, изменяющее текущее значение данных на нулевое, называется SET NULL.

ERwin предоставляет альтернативный способ усиления ссылочной

целостности в случае СУБД Fox Pro.

Примечание: ERwin располагает шестью RI-триггерами, устанавливаемыми по умолчанию, которые можно связывать с сущностями, чтобы

185

указывать СУБД ссылочную целостность для усиления. В особых ситуациях можно переопределить код, генерируемый ERwin по умолчанию, изменяя эти шаблоны триггеров в соответствии с конкретной ситуацией.

RI-триггеры, устанавливаемые ERwin по умолчанию

Для того чтобы создать триггер, в обычном случае требуется ввести нужный код SQL и поместить его на сервер. ERwin предлагает набор шаблонов RI-триггеров, устанавливаемых по умолчанию, которые используют для автоматической генерации кода SQL предопределенные макрокоманды.

Макрокоманды ERwin содержат скелетный код языка SQL, в который вставляются при генерации физической схемы базы данных имена таблиц и другие переменные. Ниже приводятся примеры макрокода триггера ERwin и расширенного кода, который экспортируется из ERwin на сервер в процессе генерации схемы.

Просмотр кода триггера, устанавливаемого по умолчанию, для сущности Щелкните правой кнопкой мыши по сущности и дайте команду меню

Triggers. ERwin открывает окно, предназначенное только для чтения, в котором показан расширенный код для каждого RI-триггера, связанного с этой сущностью.

Создание триггеров ERwin

ERwin создает RI-триггеры автоматически. Когда строится модель данных, ERwin автоматически связывает шаблон RI-триггера, устанавливаемый по умолчанию, с каждой сущностью связи. На то, какой именно шаблон триггера будет присвоен связи и на генерируемый им код SQL, влияют три критерия:

Правило ссылочной целостности, которое он применяет к связи

(RESTRICT, CASCADE, SET NULL, SET DEFAULT, NONE);

Тип связи, с которым он связан (идентифицирующая или неидентифицирующая);

Роль сущности в связи (родительская или дочерняя).

Правила ссылочной целостности Когда триггер связывается с сущностью, он автоматически устанавли-

вается так, чтобы усиливать одно из следующих правил ссылочной целостности, в зависимости от типа связи и роли сущности в этой связи.

Примечание: ERwin создает RI-тригеры автоматически, связывая шаблоны триггеров со всеми связями. Можно переопределить код SQL, генерируемый ERwin, адаптируя эти шаблоны для своей ситуации.

RI-триггеры и типы связей.

Шаблоны RI-триггеров в ERwin связываются с сущностями, исходя из типа связи и роли сущности в этой связи. Тип связи и роль сущности определяют, какое правило ссылочной целостности будет, по умолчанию, усилено присвоенным шаблоном триггера.

186

 

Таблица 3.6

 

Правила ссылочной целостности

 

 

Правило

 

ссылочной

Что оно делает

целостности

Запрещает СУБД производить требуемое изменение (INSERT,

RESTRICT

 

UPDATE или DELETE).

CASCADE

Производит требуемое изменение в первой таблице и распространяет

 

его на связанные с ней таблицы.

SET NULL

Производит требуемое изменение в первой таблице и устанавливает

 

нулевые (пустые) значения внешнего ключа в связанных с ней табли-

 

цах.

SET

Работает как SET NULL, с той разницей, что вместо нулевого значе-

DEFAULT

ния присваивает внешним ключам значение по умолчанию.

NONE

Ничего не делает (ERwin не усиливает ссылочную целостность).

Роль сущности в связи может быть – родительская (Parent) или дочерняя (Child) сущность. Если сущность является родительской в данной связи, то ERwin присваивает ей шаблон триггера для родительской сущности. Если сущность является дочерней в данной связи, то ERwin присваивает ей шаблон триггера для дочерней сущности. Код триггера, который генерируется шаблоном триггера для родительской сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в родительской таблице связи. Код триггера, который генерируется шаблоном триггера для дочерней сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в дочерней таблице связи.

Таблица 3.7 Описание присваивания связи правила ссылочной целостности

Роль сущности

 

Тип связи

 

 

Шаблон RI-

Идентифици-

Неидентифици-

 

Неидентифи-

Cвязь

триггера

рующая связь

рующая

 

цирующая

подтипа

 

 

(nulls allowed)

 

(no nulls)

 

Child Delete

None

None

 

None

None

Child Insert

Restrict

Set Null

 

Restrict

Restrict

Child Update

Restrict

Set Null

 

Restrict

Cascade

Parent Delete

Restrict

Set Null

 

Restrict

Cascade

Parent Insert

None

None

 

None

None

Parent Update

Restrict

Set Null

 

Restrict

Cascade

Примечание: с одной сущностью можно связать до шести шаблонов RI-триггеров, в зависимости от ее роли в разных связях. Если сущность является в какой-то связи родительской, то с ней можно связать триггеры

187

parent insert, update и delete. Если сущность является в какой-то связи дочерней, то с ней можно связать триггеры сhild insert, update и delete. Изменение режима RI-триггера для связи

Редактор Referential Integrity позволяет изменять правило ссылочной целостности, связанное с конкретной связью.

Работа в редакторе Trigger Template

Редактор Trigger Template позволяет изменять шаблон, связанный с любым типом RI-триггера, а также просматривать и модифицировать макрокод, используемый конкретным шаблоном. При изменении шаблона триггера можно использовать другой встроенный шаблон или пользовательский (User Override - переопределенный пользователем) шаблон.

Для входа в редактор дайте команду Global Trigger Templates...(Database/RI Triggers). ERwin открывает редактор и показывает на экране встроенные и пользовательские шаблоны триггеров, связанных с сущностями диаграммы.

Использование Trigger Toolbox и макрокоманд

Редактор Trigger Toolbox предоставляет набор предопределенных макрокоманд, которые помогают адаптировать встроенные шаблоны триггеров, создавать переопределенные шаблоны триггеров или писать новые триггеры и хранимые процедуры на SQL. Предопределенные макрокоманды, которые начинаются с символа процента (%), генерируют псевдокод, который в процессе генерации схемы расширяется в специальный синтаксис SQL, поддерживаемый СУБД.

Если щелкнуть по имени макрокоманды и выделить ее, то ERwin выведет на экран, в центральное окно, вспомогательную информацию о выделенной макрокоманде.

Если при редактировании макрокода в окне Template Code будет выполнен вход в редактор Trigger Toolbox и дважды щелкнуто по имени макрокоманды, то ERwin вставит макрокоманду в то место окна кода, где стоял курсор в последний раз.

Переопределение шаблонов триггеров в ERwin

При генерации физической схемы базы данных ERwin по умолчанию использует для генерации кода триггера на языке SQL встроенные шаблоны RI-триггеров, которые автоматически присваиваются каждой связи. Поскольку с каждым типом правила ссылочной целостности связан какойто встроенный шаблон, можно сгенерировать код триггера для всей модели и больше в этом отношении ничего не делать. Если используются шаблоны, присваиваемые ERwin по умолчанию, то ERwin составляет коды триггера по умолчанию, используя фиксированную внутреннюю схему для комбинирования различных встроенных шаблонов.

Если нужно изменить коды триггера, генерируемые на основе встроенных шаблонов, ERwin позволяет изменить шаблон и указать, что при ге-

188

нерации модифицированная версия должна заменить встроенный шаблон. ERwin позволяет переопределить триггер, устанавливаемый по умолчанию, тремя способами:

1.RI Type Override – Переопределение типа RI. Для каждой комбинации правил ссылочной целостности ERwin позволяет создать переопределенный шаблон и использовать этот шаблон вместо шаблона, используемого по умолчанию, для всех связей диаграммы, которым был присвоен этот тип правила ссылочной целостности. Используя в качестве отправного пункта встроенный код шаблона, можно, пользуясь этим способом, производить глобальные изменения в отношении ссылочной целостности, изменяя коды триггера только в одном месте. Шаблоны RI Type Override используются вместо стандартных шаблонов ERwin, если при генерации схемы задается режим RI Type Override.

2.Relationship Override – переопределение связи. Если нужно переопределить шаблон, задаваемый по умолчанию, для какой-то конкретной связи, можно модифицировать встроенный шаблон и связать новую версию только с этой связью. Шаблоны Relationship Override используются вместо стандартных шаблонов ERwin (а также вместо шаблонов RI Type Override, если они есть), если при генерации схемы задается режим

Relationship Override.

3.Entity Override – переопределение сущности. ERwin позволяет создавать собственные триггеры Entity Override для любой сущности в диаграмме. Шаблоны Entity Override используются вместо стандартных шаблонов ERwin, а также вместо созданных Вами шаблонов RI Type Override и Relationship Override, если при генерации схемы задаете режим Entity Override.

Создание шаблона RI Type Override

Шаблон RI Type Override используется для изменения поведения встроенного шаблона для типа RI-триггера. Предположим, например, что нужно, чтобы ERwin всякий раз при удалении строки в родительской таблице ORDER, использовал код триггера Parent-Delete CASCADE, присваиваемый по умолчанию, для удаления соответствующих дочерних срок в таблице Order Line, но при этом Вы хотите также автоматически захватывать удаляемую информацию и вставлять удаляемые строки в архивную таблицу, так чтобы эту информацию потом при желании можно было найти.

Один из способов, как можно это сделать – изменить встроенный триггер Parent-Delete CASCADE так, чтобы он производил архивирование, создавая RI Type Override. Имеется несколько достоинств этого способа:

к триггеру требуется добавить только пару строк кода;

изменение производится только в одном месте;

оно распространяется на всю базу данных;

оно не отражается на исходном коде приложений;

189

при решении больше не архивировать эту информацию можно будет быстро восстановить исходный встроенный шаблон Parent-Delete CASCADE.

Создание шаблона RI Type Override облегчает создание собственных триггеров ссылочной целостности, поскольку все связи, которым присваивается переопределенный тип RI-триггера, автоматически используют связанный с ним шаблон User Override.

Создание шаблона триггера Relationship Override

Чтобы облегчить работу с базой данных, целесообразно сделать так, чтобы триггеры работали идентично на всей модели данных. Однако в некоторых случаях может понадобиться изменить встроенный триггер только для одной связи. Шаблон Relationship Override используется для изменения поведения встроенного шаблона только для одной связи, а не для всех связей, для которых задан некоторый тип триггера.

Например, можно, чтобы ERwin использовал код триггера, установленный по умолчанию, – Parent-Delete RESTRICT – всякий раз при удалении строки из родительской таблицы ORDER, чтобы проверить, нет ли в этом заказе невыполненных пунктов. Если часть заказа не выполнена, то Вы, наверное, захотите использовать код триггера, устанавливаемого по умолчанию, который запрещает удалять заказ. Предположим, что в данной ситуации нужно также, чтобы триггер ссылочной целостности автоматически изменил значение в колонке Order-Status на Outstanding.

Если изменяете встроенный триггер так, чтобы он мог выполнить это действие, создавая для этого Relationship Override для триггера ParentDelete RESTRICT, то этот шаблон будет применяться только к связи между таблицами ORDER и ORDER LINE. Хотя изменение режимов ссылочной целостности для отдельных связей может усложнить работу с базой данных, использование режима Relationship Override позволяет вам поддерживать правила, которые распространяются на какие-то отдельные связи.

Примечание: режим Relationship Override изменяет действие RI-

триггера для одной конкретной связи. Создание триггера Entity Override

Во многих случаях бывает нужно, чтобы триггер выполнял действия, выходящие за рамки стандартных действий по усилению правил RI, например, производил вычисления, работал с колонкой, содержащей выведенные значения, или изменял содержимое колонки, исходя из текущего значения этой колонки. Эти триггеры расширенных правил Business Rules можно применить к связи или к сущности.

Если нужно усилить какие-то правила для отдельных сущностей, ERwin позволяет изменить поведение встроенного триггера для отдельной сущности. Шаблон Entity Override используется для изменения поведения встроенного шаблона по отношению только к одной сущности.

190

Соседние файлы в папке книги